package com.itany.corejava.code04_方法;

/**
 * @author 石小俊
 * @date 2024年01月11日 13:30
 */
public class Test02_练习 {

    public static void main(String[] args) {
        int sum = sum(100);
        System.out.println("1-100之间偶数之和:" + sum);
        sum = sum(99);
        System.out.println("1-99之间奇数之和:" + sum);
        sum = sum2(2, 3, 10);
        System.out.println("1-10之间能被2和3整除的数字之和:" + sum);

        double result = pow(2, 0);
        System.out.println("2的0次方:" + result);
        result = pow(2, 2);
        System.out.println("2的2次方:" + result);
        result = pow(2, -2);
        System.out.println("2的-2次方:" + result);
    }

    /**
     * 根据传递的参数值进行判断,如果n是一个奇数,则求n以内的奇数之和,如果n是一个偶数,则求n以内的偶数之和
     * @return
     */
    public static int sum(int n) {
        // 定义两个变量,用于分别接收奇数之和与偶数之和
        int oddSum = 0; // 奇数
        int evenSum = 0; // 偶数
        for (int i = 1; i <= n; i++) {
            // 如果迭代到的是偶数
            if (i % 2 == 0) {
                // 计算偶数之和
                evenSum += i;
            } else {
                // 否则计算奇数之和
                oddSum += i;
            }
        }
        // 如果n是偶数
        if (n % 2 == 0) {
            // 返回偶数之和
            return evenSum;
        } else {
            // 否则返回奇数之和
            return oddSum;
        }
    }

    /**
     * 求1‐n之内能被num1和num2整除的数字之和
     * @param num1
     * @param num2
     * @param n
     * @return
     */
    public static int sum2(int num1, int num2, int n) {
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            if (i % num1 == 0 && i % num2 == 0) {
                sum += i;
            }
        }
        return sum;
    }

    /**
     * 计算x的y次方,定义方法实现,不允许使用Math提供的方法
     */
    public static double pow(int x, int y) {
        int result = x;
        if (y == 0) {
            return 1;
        } else if (y > 0) {
            for (int i = 2; i <= y; i++) {
                result = result * x;
            }
            return result;
        } else {
            for (int i = 2; i <= -y; i++) {
                result = result * x;
            }
            return 1.0 / result;
        }
    }
}
